package misListasDobles;

public class ListasDobles {
	
	private NodeDoble inicio;
	
	public ListasDobles(){
		
		inicio = null;
	}
	
	public NodeDoble getInicio(){
		
		return inicio;
	}
	
	public void setInicio(NodeDoble valor){
		
		inicio = valor; 
		
	}
	
	public boolean listaVacia(){
		
		
		return (inicio == null);  
	}
	
	public void agregarInicio(String valor){
		
		NodeDoble nodeNew = new NodeDoble(valor, inicio,null);
		
		if(! listaVacia()){
			inicio.setBack(nodeNew);
		}
		
		setInicio(nodeNew);
		
		
	}
	
	public void agregarFinal(String valor){
		
		NodeDoble NodePtr;
		NodeDoble nodeNew;
		
		if(size() == 0) agregarInicio(valor);
		{
			NodePtr =inicio;
			while(NodePtr.getNext() !=null){
				NodePtr=NodePtr.getNext();
			}
			nodeNew= new NodeDoble(valor, null, NodePtr);
			NodePtr.setNext(nodeNew);
		}
		
	}
	
	public String borrarInicio(){
		
		
		String valor = "";
		
		
		if (size()== 0) valor = "LISTA VACIA";
		
		else 
			if (size()==1) {
				
				valor = inicio.getData();
				inicio = null;
			}
		
			else {
				
				valor = inicio.getData();
				inicio.getNext().setBack(null);
				inicio = inicio.getNext();
			}
		
		return valor;
	}
	
	public String borrarFinal(){
		NodeDoble NodePtr;
		String valor;
		
		if(size()==0) valor ="LISTA VACIA";
		else
			if(size()==1){
				valor = inicio.getData();
				inicio = null;
			}
			else{
				NodePtr=inicio;
				while(NodePtr.getNext().getNext() != null){
					NodePtr = NodePtr.getNext();
				}
				valor=NodePtr.getNext().getData();
				NodePtr.setNext(null);
			}
		return valor;
	}
	
	public int size(){
		
		int total = 0;
		NodeDoble  NodePtr;
	
		NodePtr = inicio; 
		
		while (NodePtr != null) {
			
			NodePtr = NodePtr.getNext();
			total ++;
		}
		
		
		return total;
	}
	
	public String toString(){
		
		NodeDoble NodePtr;
		String Lista;
		
		NodePtr = inicio;
		Lista = "";
		
		while (NodePtr != null){
			
			Lista += NodePtr.getData() + "->";
			NodePtr = NodePtr.getNext();
		}
	  
	  Lista += "NULL";
	  return Lista;
	  	
	}
}